const express = require('express');
const jwt = require('jsonwebtoken');
const pool = require('../database');
const router = express.Router();

// 密钥从环境变量获取
const JWT_SECRET = process.env.JWT_SECRET || 'N4w!x9Q2s@1T';

// 提取用户验证逻辑
async function getUserByUsername(username) {
    const [rows] = await pool.execute('SELECT * FROM users WHERE user_id = ?', [username]);
    return rows.length > 0 ? rows[0] : null;
}

// 验证密码
function isPasswordCorrect(storedPassword, inputPassword) {
    return storedPassword === inputPassword;
}

// 验证角色
function isRoleCorrect(storedRole, inputRole) {
    return storedRole === inputRole;
}

// 验证格式
function isValid(inputRole, username) {
    // 当 role 为 teacher 时，检查 username 是否是 5 位数字
    if (inputRole === 'teacher') {
        const teacherRegex = /^[0-9]{5}$/; // 正则：5 位数字
        return teacherRegex.test(username);
    }
    if (inputRole === 'student') {
        const studentRegex = /^[A-VX-Z](?:[ABD]|[0-9])([0-2][0-9]|30)\d{5}$/;
        return studentRegex.test(username);
    }
    
    // 对其他 role 不验证 username 的格式
    return true; // 默认通过
}

function isValidPassword(password) {
    const passwordRegex = /^.{6,}$/; // 正则：5 位数字
    return passwordRegex.test(password);
}

router.post('/', async (req, res) => {
    const { username, password, role } = req.body;

    try {

        // 查询用户信息
        const user = await getUserByUsername(username);

        if (!isValid(role, username)) {
            return res.status(403).json({ message: '用户名格式错误' });
        }
        
        if (!isValidPassword(password)) {
            return res.status(403).json({message:'密码至少为6位'})
        }

        if (!user) {
            return res.status(403).json({ message: '无此账号' });
        }

        // 验证密码
        if (!isPasswordCorrect(user.password, password)) {
            return res.status(403).json({ message: '用户名或密码错误' });
        }

        // 验证角色
        if (!isRoleCorrect(user.role, role)) {
            return res.status(403).json({ message: '无此账号' });
        }

        // 生成 JWT
        const token = jwt.sign(
            { sub: user.user_id, role: user.role },
            JWT_SECRET,
            { expiresIn: '24h' }
        );

        // 返回用户信息和 token
        return res.json({
            id: user.user_id,
            username: user.name,
            token,
            role: user.role,
        });

    } catch (error) {
        console.error(error);
        return res.status(500).json({ message: '服务器内部错误，请稍后重试' });
    }
});

module.exports = router;
